package org.wordpress.android.util; import android.text.Editable; import android.text.Html; import android.text.style.BulletSpan; import android.text.style.LeadingMarginSpan; import org.xml.sax.XMLReader; import java.util.Vector; /** * Handle tags that the Html class doesn't understand Created by dan on 7/9/13. * Tweaked from source at * http://stackoverflow.com/questions/4044509/android-how- * to-use-the-html-taghandler */ public class WPHtmlTagHandler implements Html.TagHandler { private int mListItemCount = 0; private Vector<String> mListParents = new Vector<String>(); @Override public void handleTag(final boolean opening, final String tag, Editable output, final XMLReader xmlReader) { if (tag.equals("ul") || tag.equals("ol") || tag.equals("dd")) { if (opening) { mListParents.add(tag); } else mListParents.remove(tag); mListItemCount = 0; } else if (tag.equals("li") && !opening) handleListTag(output); } private void handleListTag(Editable output) { if (mListParents.lastElement().equals("ul")) { output.append("\n"); String[] split = output.toString().split("\n"); int lastIndex = split.length - 1; int start = output.length() - split[lastIndex].length() - 1; output.setSpan(new BulletSpan(15 * mListParents.size()), start, output.length(), 0); } else if (mListParents.lastElement().equals("ol")) { mListItemCount++; output.append("\n"); String[] split = output.toString().split("\n"); int lastIndex = split.length - 1; int start = output.length() - split[lastIndex].length() - 1; output.insert(start, mListItemCount + ". "); output.setSpan( new LeadingMarginSpan.Standard(15 * mListParents.size()), start, output.length(), 0); } } }